package mumu.android.localstorage;

import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import mumu.android.R;
import mumu.android.lib.localstorage.NewsEn;
import mumu.android.lib.tool.MLog;
import mumu.android.lib.tool.Tools;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

/**
 * 
 * 之前介绍了dom解析，dom解析有一个缺点：即需要将文档全部加载到内存中构建树结构进行解析，针对大数据解析会有一定效率问题。特别在内存较小移动设备上，
 * 这个问题会被放大。 这篇介绍的SAX就能够很好的解决这个问题。 SAX(Simple API for
 * XML):相对于Dom而言，它是一种速度更快、效率更高、占用内存更小的xml解析方式。
 * 它是基于事件驱动的，就是说不需要一下解析整个文档，可以按照内容，顺序解析
 * ，在解析中读取到的xml字节是否符合xml语法中的某些规则，则触发相应的事件，调用回调方法。
 * 
 */
public class xml_sax extends DialogFragment {

	static xml_sax instance;

	public static xml_sax getInstance() {
		if (instance == null) {
			instance = new xml_sax();
		}
		return instance;
	}

	Dialog dialog;
	TextView txt;
	List<NewsEn> list = new ArrayList<NewsEn>();

	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		dialog = new Dialog(getActivity(), R.style.dialog);
		LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
		View view = layoutInflater.inflate(R.layout.dialog_listview, null);
		view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
		dialog.setContentView(R.layout.dialog_listview);
		dialog.setCanceledOnTouchOutside(true);
		try {

			SAXParserFactory saxFactory = SAXParserFactory.newInstance(); // 获取一个对象
			SAXParser saxParser = saxFactory.newSAXParser();// 利用获取到的对象创建一个解析器
			XMLDefaultHandler handler = new XMLDefaultHandler();// 设置defaultHandler
			saxParser.parse(getActivity().getAssets().open("books.xml"), handler);// 进行解析

			String string = "";
			for (int i = 0; i < list.size(); i++) {
				string += list.get(i).toString();

			}
			Tools.toast(getActivity(), string);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dialog;
	}

	public class XMLDefaultHandler extends DefaultHandler {
		private static final String TAG = "dd";

		// 标签内容
		@Override
		public void characters(char[] ch, int start, int length) throws SAXException {
			MLog.d(TAG, "characters：" + new String(ch, start, length));
		}

		// 解析文档结束
		@Override
		public void endDocument() throws SAXException {
			super.endDocument();
			MLog.d(TAG, "endDocument");
		}

		// 开始标签结束
		@Override
		public void endElement(String uri, String localName, String qName) throws SAXException {
			MLog.d(TAG, "endElement ：" + localName);
		}

		// 解析文档开始
		@Override
		public void startDocument() throws SAXException {
			MLog.d(TAG, "startDocument");
		}

		// 读到开始标签
		@Override
		public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) throws SAXException {
			MLog.d(TAG, "startElement：" + localName);

			if (localName.equals("node")) {
				NewsEn newsEn = new NewsEn();
				newsEn.defaultlogo = attributes.getValue("defaultlogo");
				newsEn.newstitle = attributes.getValue("newstitle");
				list.add(newsEn);
			}
		}
	}

}
